package xyz.ibenben.zhongdian.system.form;

import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang.StringUtils;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.entity.Example.Criteria;
import xyz.ibenben.zhongdian.system.entity.HouseStatus;
import xyz.ibenben.zhongdian.system.entity.enums.HouseStructureEnum;
import xyz.ibenben.zhongdian.system.entity.enums.StatusTypeEnum;

import java.math.BigDecimal;

/**
 * 房屋状态查询条件类
 * 提供了对拥有者，所在楼层类型等字段的查询。
 * 并使用Example把所得到的结果整合为实例，最后通过服务实现类调用数据库查询结果
 *
 * @author chenjian
 * @since 2017年9月27日上午10:57:28
 */
@Setter
@Getter
public class HouseStatusForm extends SearchForm{
	private static final long serialVersionUID = 241327111022525056L;

	/* 拥有者 */
	protected Long ownerId;

	/* 所在楼层 */
	protected Integer houseInLayer;

	/* 建筑面积 */
	protected BigDecimal coveredArea;

	/* 使用面积 */
	protected BigDecimal useableArea;

	/* 键 */
	protected String key;

	/* 房屋结构 */
	protected HouseStructureEnum structure;

	/* 状态类型 */
	protected StatusTypeEnum type;

	/**
	 * 构造实例
	 * @return 返回值
	 */
	@Override
	public Example buildSearchCommond() {
		Example example = new Example(HouseStatus.class);
		Criteria criteria = example.createCriteria();
		if(coveredArea != null){
			//根据建筑面积查询
			criteria.andEqualTo("coveredArea", coveredArea);
		}
		if(useableArea != null){
			//根据使用面积查询
			criteria.andEqualTo("useableArea", useableArea);
		}
		if(StringUtils.isNotBlank(key)){
			//根据设计目的模糊查询
			criteria.andLike("designPurpose", "%" + key + "%");
		}
		if(houseInLayer != null){
			//根据所在层数查询
			criteria.andEqualTo("houseInLayer", houseInLayer);
		}
		if(structure != null){
			//根据房屋结构查询
			criteria.andEqualTo("structure", structure);
		}
		if(type != null){
			//根据类型查询
			criteria.andEqualTo("type", type);
		}
		if(ownerId != null){
			//根据拥有者主键查询
			criteria.andEqualTo("ownerId", ownerId);
		}
		return example;
	}	
	
}
